#include "Player.h"
#include "Globals.h" // 访问 player, bullets, images
#include "Structs.h" // 如果需要访问 Equipment 结构体 (用于模块)

// 创建玩家子弹
void player_shoot() {
    // 查找一个未激活的子弹槽位并为玩家初始化它

    for (int i = 0; i < MAX_BULLETS; i++) {
        if (!bullets[i].active) { // 找到了可用槽位
            // 初始化子弹属性
            bullets[i].x = player.x; // 从玩家中心 X 发射
            // 从玩家机头位置 Y 发射
            bullets[i].y = player.y - (image_Plane[0].getheight() / 2.0f);
            bullets[i].speed = 15.0f;     // 子弹速度
            bullets[i].attack_power = 10; // 基础威力
            bullets[i].type = 0;          // 玩家子弹类型
            bullets[i].num = 0;           // 玩家子弹图片索引
            bullets[i].angle = -90.0f;    // 向上 (-90 度)
            bullets[i].active = true;     // 激活子弹
            bullets[i].owner = 0;         // 拥有者是玩家

            // --- 可选: 基于装备的射击逻辑 ---
            // if (player.modules[WEAPON] && player.modules[WEAPON]->is_active) {
            //    // 根据武器类型修改子弹属性或发射方式 (例如双发、散射)
            // }

            break; // 每次调用只发射一颗子弹 (除非武器修改了这个行为)
        }
    }
    // 如果找不到空槽位，本次射击不生效
}

// 处理玩家移动 (WASD) 和射击 (空格) 输入
void handle_player_movement_and_shooting(ULONGLONG current_time) {

    // --- 移动 ---
    float currentSpeed = player.speed; // 使用玩家当前的速度属性

    // 使用 GetAsyncKeyState 检查 WASD 键以实现平滑移动
    bool moved = false; // 标记本帧是否移动 (可能用于动画等)
    if (GetAsyncKeyState('W') & 0x8000) { player.y -= currentSpeed; moved = true; } // 上
    if (GetAsyncKeyState('S') & 0x8000) { player.y += currentSpeed; moved = true; } // 下
    if (GetAsyncKeyState('A') & 0x8000) { player.x -= currentSpeed; moved = true; } // 左
    if (GetAsyncKeyState('D') & 0x8000) { player.x += currentSpeed; moved = true; } // 右

    // --- Boundary Check ---
    // Use player image dimensions for accurate boundaries
    float playerWidth = image_Plane[0].getwidth(); // 获取宽度
    float playerHeight = image_Plane[0].getheight(); // 获取高度

    // 检查宽度和高度是否有效，防止使用未加载的图片尺寸
    if (playerWidth > 0 && playerHeight > 0) {
        float minX = playerWidth / 2.0f;
        float maxX = getwidth() - playerWidth / 2.0f;
        float minY = playerHeight / 2.0f;
        float maxY = getheight() - playerHeight / 2.0f;

        if (player.x < minX) player.x = minX;
        if (player.x > maxX) player.x = maxX;
        if (player.y < minY) player.y = minY;
        if (player.y > maxY) player.y = maxY;
    }
    else {
        // 如果图片无效，使用默认的边界或打印警告
        // printf("Warning: Player image not loaded, using default boundaries.\n");
        if (player.x < 0) player.x = 0;
        if (player.x > getwidth()) player.x = getwidth();
        if (player.y < 0) player.y = 0;
        if (player.y > getheight()) player.y = getheight();
    }
    // --- 射击 ---
    static ULONGLONG lastShootTime = 0; // 静态变量，记录上次射击时间
    // 计算射击间隔 (毫秒) - 如果射速为0或负数，给一个很大的间隔
    float shootInterval = (player.total_fire_rate > 0) ? (1000.0f / player.total_fire_rate) : 10000.0f;

    if (GetAsyncKeyState(VK_SPACE) & 0x8000) { // 检查空格键是否被按下
        if (current_time - lastShootTime >= shootInterval) { // 检查是否达到射击间隔
            player_shoot();           // 调用射击函数
            lastShootTime = current_time; // 更新上次射击时间
        }
    }
}